#ifndef _HELIX_CAMERA_H_
#define _HELIX_CAMERA_H_

#include <Math.h>
#include "../HObject.h"


/*  class for a camera
    Order of transformations for fps style camera:
	    translate   (determined by physics engine)
		rotate about y axis  (y is up axis)
		rotate about x axis
*/

namespace helix{

	class MY_CLASS Camera : public HObject
	{
	protected:
		float position[3];
		float angles[3];

	public:
		Camera();
		virtual ~Camera();

		float x();
		float y();
		float z();
		float *getPosition();

		float xRot();
		float yRot();
		float zRot();

		void setX(float x);
		void setY(float y);
		void setZ(float z);
		void setPosition(float x,float y,float z);
		void setPosition(float *pos);

		void setXRot(float rads);
		void setYRot(float rads);
		void setZRot(float rads);
		void addXRot(float rads);
		void addYRot(float rads);
		void addZRot(float rads);

		void trackTo(float *point, float *up);      //tracks the camera to point in space (up is the up vector)
		void trackTo(float *point);                 //simplified track to (uses <0,1,0> for the up vector)
		void trackTo(float x,float y,float z);      //simplified track to, using 3 floats for x,y,and z position of object

		void Print();

		virtual void display() = 0;                     //makes class abstract... implement this function in OGL or DirectX
	};

}

#endif